package com.generic.trouble;

import java.util.ArrayList;
import java.util.List;

public class Demo4 {

	//我们无法对泛型代码直接使用instanceof关键字，因为Java编译器在生成代码的时候会擦除所有相关泛型的类型信息，正如我们上面验证过的JVM在运行时期无法识别出ArrayList<Integer>和ArrayList<String>的之间的区别：
	/**
	public static <E> void rtti(List<E> list) {
	    if (list instanceof ArrayList<Integer>) {  // compile-time error

	        // ...

	    }

	}
	 */

	//=> { ArrayList<Integer>, ArrayList<String>, LinkedList<Character>, ... }，和上面一样，我们可以使用通配符重新设置bounds来解决这个问题：
	public static void rtti(List<?> list) {

	    if (list instanceof ArrayList<?>) {  // OK; instanceof requires a reifiable type

	        // ...

	    }

	}

}
